package class02

func MinOps(arr []int) int {
	if arr == nil || len(arr) == 0 {
		return 0
	}
	size := len(arr)
	sum := 0
	for i:=0; i<len(arr); i++ {
		sum += arr[i]
	}
	if sum % size != 0 {
		return -1
	}
	avg := sum / size
	leftSum := 0
	ans := 0
	for i:=0; i<len(arr); i++ {
		// i 是第i号机器，左边的是 0-i-1, 右边的是 i+1 - n
		// 负的需要输入，正的需要输出
		leftRest := leftSum - i*avg
		rightRest := (sum - leftSum - arr[i]) - (size - i - 1)*avg
		if leftRest < 0 && rightRest < 0 {
			ans = max(ans, abs(leftRest) + abs(rightRest))
		} else {
			ans = max(ans, max(abs(leftRest), abs(rightRest)))
		}
		leftSum += arr[i]
	}
	return ans
}

func max(a, b int) int {
	if a > b {
		return a
	}
	return b
}

func abs(a int) int {
	if a < 0 {
		return -a
	}
	return a
}
